//!
/**
 ***********************************************************************************************************
 * 
 ***********************************************************************************************************
 * @file RBVertexDeclaration.cpp
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Precompiled Header
 ***********************************************************************************************************/
#include "RBMainPCH.h"

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include "RBVertexDeclaration.h"
#include "RBVertexElement.h"

/***********************************************************************************************************
 * Defines
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Classes implementation
 ***********************************************************************************************************/

/**
 ***********************************************************************************************************
 * Constructor
 ***********************************************************************************************************/
RBVertexDeclaration::RBVertexDeclaration(RBHardwareBufferManager* pHBMgr, RBVertexElement* pElements, uint32 uiElementCount, void* pNative)
: RBHardwareBuffer(rb_hw_buffer_usage::HBU_DEFAULT, rb_hw_buffer_usage::MP_GPU, pHBMgr, pNative)
, m_uiElementCount(uiElementCount)
{
    m_pElements = new RBVertexElement[uiElementCount];
    for (uint32 ui=0; ui < m_uiElementCount; ++ui)
    {
        m_pElements[ui] = pElements[ui];
    }
}

/**
 ***********************************************************************************************************
 * Destructor
 ***********************************************************************************************************/
RBVertexDeclaration::~RBVertexDeclaration()
{
    delete[] m_pElements;
}

/***********************************************************************************************************
 *
 ***********************************************************************************************************/
uint32 RBVertexDeclaration::ComputeVertexSize()
{
    uint32 uiSize = 0;
    for (uint32 ui=0; ui < m_uiElementCount; ++ui)
    {
        uiSize += m_pElements[ui].GetSize();
    }

    return uiSize;
}

/***********************************************************************************************************/
